package com.fg.common.util;

import com.fg.common.enums.ResponseEnum;
import com.fg.common.exception.FgException;
import com.fg.common.response.Response;
import com.fg.common.response.ResponseCodeConstant;
import org.apache.commons.lang3.StringUtils;

import java.util.Collection;

/**
 * 自定义断言
 * @author lvlaotou
 * @version 1.0.0
 */
public class Assert {

    private Assert(){}

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param message 错误描述信息
     */
    public static void assertNotNull(Object target,String message){
        assertNotNull(target, ResponseCodeConstant.PARAM_ERROR, message);
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param message 错误描述信息
     */
    public static void assertNotNull(Object[] target,String message){
        if (target == null || target.length == 0){
            throw new FgException(ResponseCodeConstant.PARAM_ERROR, message);
        }
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param code 错误状态码
     * @param message 错误描述信息
     */
    public static void assertNotNull(Object target, String code, String message){
        if (target == null){
            throw new FgException(code, message);
        }
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param responseEnum 响应枚举对象
     */
    public static void assertNotNull(Object target, ResponseEnum responseEnum){
        if (target == null){
            throw new FgException(responseEnum);
        }
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param message 错误描述信息
     */
    public static void assertNotNull(String target,String message){
        assertNotNull(target, ResponseCodeConstant.PARAM_ERROR, message);
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param code 错误状态码
     * @param message 错误描述信息
     */
    public static void assertNotNull(String target, String code, String message){
        if (StringUtils.isBlank(target)){
            throw new FgException(code, message);
        }
    }

    /**
     * 断言是否不为空，为空则抛出异常
     * @param target 目标对象
     * @param response 错误对象
     */
    public static void assertNotNull(String target, Response response){
        if (StringUtils.isBlank(target)){
            throw new FgException(response);
        }
    }

    /**
     * 断言是否正确
     * @param flag 条件
     * @param message 错误描述
     */
    public static void assertIsTrue(boolean flag,String message){
        assertIsTrue(flag, ResponseCodeConstant.PARAM_ERROR, message);
    }

    /**
     * 断言是否正确
     * @param flag 条件
     * @param message 错误描述
     */
    public static void assertIsTrue(boolean flag, String code, String message){
        if (flag){
            throw new FgException(code, message);
        }
    }
    /**
     * 断言是否正确
     * @param flag 条件
     * @param response 错误对象
     */
    public static void assertIsTrue(boolean flag, Response response){
        if (flag){
            throw new FgException(response);
        }
    }

    /**
     * 断言不为空  为空则抛出自定义异常
     * @param target 目标集合
     * @param message 描述信息
     */
    public static void assertNotNull(Collection<?> target, String message){
        assertNotNull(target, ResponseCodeConstant.PARAM_ERROR, message);
    }

    /**
     * 断言不为空  为空则抛出自定义异常
     * @param target 目标集合
     * @param message 描述信息
     */
    public static void assertNotNull(Collection<?> target, String code, String message){
        if (target == null || target.isEmpty()){
            throw new FgException(code, message);
        }
    }
}
